#include<iostream>
#include<vector>
using namespace std;
/*
给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
子数组是数组中的一个连续部分。
解题思路：
要求一个数组中的最大连续子序列的和，我们可以设dp[i]表示以下标i元素为结尾的最大子序列的和，
并且以下标i为结尾的子序列的和可以由前面的一个状态推出，dp[i] = dp[i-1]+nums[i]
表示以下标i-1元素为结尾的子序列加上nums[i]的元素，还可以舍弃前面的最大子序列的和dp[i-1],重新开始一个子序列nums[i]
所以有递推公式dp[i] = max(dp[i-1]+nums[i],nums[i])
*/
int dp(vector<int> nums)
{
    //创建dp数组
    vector<int> dp(nums.size());
    dp[0] = nums[0];
    int result = nums[0];
    for(int i=1;i<nums.size();i++)
    {
        dp[i] = max(dp[i-1]+nums[i],nums[i]);
        if(result<dp[i])
            result = dp[i];
    }
    return result;
}
int main()
{
    cout<<"enter a number:"<<endl;
    int number;
    cin>>number;
    cout<<"enter nums:"<<endl;
    vector<int> nums(number);
    for(int i=0;i<number;i++)
        cin>>nums[i];
    cout<<dp(nums);
    return 0;
}